home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Personal Computer World 2005 October
/
PCWOCT05.iso
/
Software
/
FromTheMag
/
XAMPP 1.4.14
/
xampp-win32-1.4.14-installer.exe
/
xampp
/
php
/
pear
/
DBA.php
< prev
next >
Wrap
PHP Script
|
2004-10-01
|
10KB
|
265 lines
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+
// | Copyright (c) 2002-2003 Brent Cook |
// +----------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330,Boston,MA 02111-1307 USA|
// +----------------------------------------------------------------------+
// | Authors: Brent Cook <busterb@mail.utexas.edu> |
// | Olaf Conradi <conrado@drake.bt.co.uk> |
// +----------------------------------------------------------------------+
//
// $Id: DBA.php,v 1.36 2004/05/04 04:42:31 busterb Exp $
//
require_once('PEAR.php');
/**
* If you add an error code here, make sure you also add a textual
* version of it in DBA::errorMessage().
*/
// userinfo contains:
define('DBA_ERROR', -1);
define('DBA_ERROR_UNSUP_DRIVER', -2); // drivername
define('DBA_ERROR_UNSUP_PERSISTENCE', -3);
define('DBA_ERROR_NO_DRIVER', -4); // drivername
define('DBA_ERROR_NO_DBNAME', -5);
define('DBA_ERROR_NOSUCHDB', -6); // dbname
define('DBA_ERROR_INVALID_MODE', -7); // filemode
define('DBA_ERROR_CANNOT_CREATE', -8); // dbname
define('DBA_ERROR_CANNOT_OPEN', -9);
define('DBA_ERROR_CANNOT_DROP', -10);
define('DBA_ERROR_NOT_READABLE', -11);
define('DBA_ERROR_NOT_WRITEABLE', -12);
define('DBA_ERROR_NOT_OPEN', -13);
define('DBA_ERROR_NOT_FOUND', -14);
define('DBA_ERROR_ALREADY_EXISTS', -15); // key
/**
* DBA is a set of classes for handling and extending Berkeley DB style
* databases. It works around some of the quirks in the built-in dba
* functions in PHP (e.g. gdbm does not support dba_replace), has a file-based
* dbm engine for installations where dba support is not included in PHP.
*
* @author Brent Cook <busterb@mail.utexas.edu>
* @version 1.0
* @access public
* @package DBA
*/
class DBA extends PEAR
{
/**
* Default constructor
*/
function DBA()
{
// call the base constructor
$this->PEAR();
}
/**
* Creates a new DBA object
*
* @static
* @param string $driver type of storage object to return
* @return object DBA storage object, returned by reference
*/
function &create($driver = 'file')
{
if (!function_exists('dba_open') || ($driver=='file')) {
require_once 'DBA/Driver/File.php';
return new DBA_Driver_File();
} elseif (in_array($driver, DBA::getDriverList())) {
require_once 'DBA/Driver/Builtin.php';
return new DBA_Driver_Builtin($driver);
} else {
return DBA::raiseError(DBA_ERROR_UNSUP_DRIVER, NULL, NULL,
'driver: '.$driver);
}
}
/**
* Deletes a DBA database from the filesystem
*
* @static
* @param string $driver type of storage object to return
* @return object DBA storage object, returned by reference
*/
function db_drop($name, $driver = 'file')
{
if (!function_exists('dba_open') || ($driver=='file')) {
require_once 'DBA/Driver/File.php';
return DBA_Driver_File::db_drop($name);
} elseif (in_array($driver, DBA::getDriverList())) {
require_once 'DBA/Driver/Builtin.php';
return DBA_Driver_Builtin::db_drop($name);
} else {
return DBA::raiseError(DBA_ERROR_UNSUP_DRIVER, NULL, NULL,
'driver: '.$driver);
}
}
/**
* Returns whether a result code from a DBA method is an error
*
* @param int $value result code
* @return boolean whether $value is a DBA_Error
* @access public
*/
function isError($value)
{
return (is_object($value) &&
(is_a($value, 'dba_error') || is_subclass_of($value, 'dba_error')));
}
/**
* Return a textual error message for a DBA error code
*
* @param int $value error code
* @return string error message, or false if the error code was
* not recognized
* @access public
*/
function errorMessage($value)
{
static $errorMessages;
if (!isset($errorMessages)) {
$errorMessages = array(
DBA_ERROR => 'unknown error',
DBA_ERROR_UNSUP_DRIVER => 'unsupported database driver',
DBA_ERROR_UNSUP_PERSISTENCE => 'persistent connections not supported',
DBA_ERROR_NO_DRIVER => 'no driver loaded',
DBA_ERROR_NO_DBNAME => 'no databasename given',
DBA_ERROR_NOSUCHDB => 'database not found',
DBA_ERROR_INVALID_MODE => 'invalid file mode',
DBA_ERROR_CANNOT_CREATE => 'can not create database',
DBA_ERROR_CANNOT_OPEN => 'can not open database',
DBA_ERROR_CANNOT_DROP => 'can not drop database',
DBA_ERROR_NOT_READABLE => 'database not readable',
DBA_ERROR_NOT_WRITEABLE => 'database not writeable',
DBA_ERROR_NOT_OPEN => 'database not open',
DBA_ERROR_NOT_FOUND => 'key not found',
DBA_ERROR_ALREADY_EXISTS => 'key already exists',
);
}
if (DBA::isError($value)) {
$value = $value->getCode();
}
return isset($errorMessages[$value]) ?
$errorMessages[$value] : $errorMessages[DBA_ERROR];
}
/**
* This method is used to communicate an error and invoke error
* callbacks etc. Basically a wrapper for PEAR::raiseError
* without the message string.
*
* @param mixed $code integer error code, or a PEAR error object (all
* other parameters are ignored if this parameter is an object
* @param int $mode error mode, see PEAR_Error docs
* @param mixed $options If error mode is PEAR_ERROR_TRIGGER, this is the
* error level (E_USER_NOTICE etc). If error mode is
* PEAR_ERROR_CALLBACK, this is the callback function, either as a
* function name, or as an array of an object and method name. For
* other error modes this parameter is ignored.
* @param string $userinfo Extra debug information.
* @return object a PEAR error object
* @access public
* @see PEAR_Error
*/
function &raiseError($code = DBA_ERROR, $mode = NULL, $options = NULL,
$userinfo = NULL)
{
// The error is yet a DBA error object
if (is_object($code)) {
return PEAR::raiseError($code, NULL, NULL, NULL, NULL, NULL, TRUE);
}
return PEAR::raiseError(NULL, $code, $mode, $options, $userinfo,
'DBA_Error', TRUE);
}
/**
* Returns whether a database exists
*
* @param string $name name of the database to find
* @param string @driver driver to test for
* @return boolean true if the database exists
*/
function db_exists($name, $driver = 'file')
{
if (!function_exists('dba_open') || ($driver=='file')) {
// the file driver stores data in two files
return (file_exists($name.'.dat') && file_exists($name.'.idx'));
} elseif (in_array($driver, array('db2', 'db3', 'db4', 'gdbm'))) {
// these drivers store data in one file
return file_exists($name);
} else {
// do not know how other drivers store data
return DBA::raiseError(DBA_ERROR_NO_DRIVER, NULL, NULL, 'driver: '.$driver);
}
}
/**
* Returns an array of the currently supported drivers
*
* @return array
*/
function getDriverList()
{
if (function_exists('dba_handlers')) {
return array_merge(dba_handlers(), array('file'));
} else {
return array('file');
}
}
}
/**
* DBA_Error implements a class for reporting portable database error
* messages. Based on the PEAR::MDB implementation.
*
* @package DBA
* @author Olaf Conradi <conradi@cs.utwente.nl>
*/
class DBA_Error extends PEAR_Error
{
/**
* DBA_Error constructor.
*
* @param mixed $code DBA error code, or string with error message.
* @param integer $mode what "error mode" to operate in
* @param integer $level what error level to use for
* $mode & PEAR_ERROR_TRIGGER
* @param smixed $debuginfo additional debug info, such as the last query
*/
function DBA_Error($code = DBA_ERROR, $mode = PEAR_ERROR_RETURN,
$level = E_USER_NOTICE, $debuginfo = NULL)
{
if (is_int($code)) {
$this->PEAR_Error('DBA Error: '.DBA::errorMessage($code), $code,
$mode, $level, $debuginfo);
} else {
$this->PEAR_Error('DBA Error: '.$code, DBA_ERROR, $mode, $level,
$debuginfo);
}
}
}
?>